struct ia64_sal_retval isrv;
#ifdef CONFIG_XEN
if (is_running_on_xen()) {
- struct xencomm_mini xc_area[2];
- int nbr_area = 2;
struct xencomm_handle *desc;
- if (xencomm_create_mini(xc_area, &nbr_area, sal_info,
- ia64_sal_get_state_info_size(sal_info_type), &desc))
+ if (xencomm_create(sal_info,
+ ia64_sal_get_state_info_size(sal_info_type),
+ &desc, GFP_KERNEL))
return 0;
SAL_CALL_REENTRANT(isrv, SAL_GET_STATE_INFO, sal_info_type, 0,
desc, 0, 0, 0, 0);
+ xencomm_free(desc);
} else
#endif
SAL_CALL_REENTRANT(isrv, SAL_GET_STATE_INFO, sal_info_type, 0,
static ia64_mc_info_t ia64_mc_info;
+#ifdef XEN
+#define jiffies NOW()
+#undef HZ
+#define HZ 1000000000UL
+#endif
+
#define MAX_CPE_POLL_INTERVAL (15*60*HZ) /* 15 minutes */
#define MIN_CPE_POLL_INTERVAL (2*60*HZ) /* 2 minutes */
#define CMC_POLL_INTERVAL (1*60*HZ) /* 1 minute */
ia64_mca_cpe_int_caller(int cpe_irq, void *arg, struct pt_regs *ptregs)
{
static int start_count = -1;
+#ifdef XEN
+ static unsigned long poll_time = MIN_CPE_POLL_INTERVAL;
+#else
static int poll_time = MIN_CPE_POLL_INTERVAL;
+#endif
unsigned int cpuid;
cpuid = smp_processor_id();
}
break;
case SAL_GET_STATE_INFO:
- {
+ if (current->domain == dom0) {
sal_queue_entry_t *e;
unsigned long flags;
struct smp_call_args_t arg;
spin_unlock_irqrestore(&sal_queue_lock, flags);
xfree(e);
}
+ } else {
+ status = IA64_SAL_NO_INFORMATION_AVAILABLE;
+ r9 = 0;
}
break;
case SAL_GET_STATE_INFO_SIZE:
r9 = ia64_sal_get_state_info_size(in1);
break;
case SAL_CLEAR_STATE_INFO:
- {
+ if (current->domain == dom0) {
sal_queue_entry_t *e;
unsigned long flags;
struct smp_call_args_t arg;